﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace JasRibbonApplicatie.Classes
{
    public class MateriaalBestelling
    {
        public int MateriaalBestelling_id { get; set; }
        public int Aanvraag_id { get; set; }
        // geen 'private set', omdat we een lege constructor gebruiken met initializers....
        public int AantalAangevraagd { get; set; } 
        private int aantalGoedgekeurd;
        public int AantalGoedgekeurd
        {
            get { return aantalGoedgekeurd; }
            set {
                aantalGoedgekeurd = value;
                //check lijkt me wa overdreven.. als ik een telefoontje met de vraag iets toe te voegen wat dan?

                /*if (aantalGoedgekeurd <= AantalAangevraagd)
                {
                    aantalGoedgekeurd = value;
                }
                else
                {
                    throw new ArgumentOutOfRangeException("AantalGoedgekeurd", "Aantal goedgekeurd kan niet groter zijn dan het aantal aangevraagd");
                }
                 */
            }
        }
        private int materiaalType_id;
        public int MateriaalType_id
        {
            get
            {
                return materiaalType_id;
            }
            set
            {
                materiaalType_id = value;
                MateriaalVolledig = Queries.GetTypeMateriaalMetToebehorengByMateriaalTypeId(materiaalType_id);
            }
        }
        public TypeMateriaalMetToebehoren MateriaalVolledig
        {
            get;
            private set;
        }

        // buiten deze bestelling (gewoon voor andere activiteiten bijvoorbeeld)
        public int AantalReedsOntleend
        {
            get
            {
                //aantal ontleend exclusief deze
                return Queries.GetAantalMateriaalOntleend(MateriaalType_id, Aanvraag_id);
            }
        }

        public int AantalUitgescand
        {
            get
            {
                return -1;
            }
        }
        public MateriaalBestelling() {  }

        public MateriaalBestelling(int materiaalType_id, int aanvraagId, int aantalAangevraagd=0,int aantalGoedgekeurd=0)
        {
            this.MateriaalType_id = materiaalType_id;
            this.Aanvraag_id = aanvraagId;
            this.AantalAangevraagd = aantalAangevraagd;
            this.AantalGoedgekeurd = aantalGoedgekeurd;
        }

        public override bool Equals(object obj)
        {
            if (obj.GetType().Equals(this.GetType()))
            {
                MateriaalBestelling anderObject = (MateriaalBestelling)obj;
                return (this.GetHashCode() == anderObject.GetHashCode());
            }
            return false;
        }

        public override int GetHashCode()
        {
            return (MateriaalBestelling_id.GetHashCode() + Aanvraag_id.GetHashCode() + MateriaalVolledig.GetHashCode() + AantalAangevraagd.GetHashCode() - AantalGoedgekeurd.GetHashCode());
        }

        public override string ToString()
        {
            return (Aanvraag_id.ToString() + " " + MateriaalVolledig.Korte_naam + " " + AantalAangevraagd.ToString());
        }
    }
}
